/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAOOracle;

import DAO.DAOPaciente;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Collection;
import java.util.LinkedList;
import modelo.Domicilio;
import modelo.Empresa;
import modelo.Paciente;

/**
 *
 * @author Nai
 */
public class PacienteDAOOracle implements DAOPaciente {

    @Override
    public boolean insert(Paciente p) {
        boolean res = false;
        Connection con = OracleDAOFactory.createConnection();
        try {
            PreparedStatement st = con.prepareStatement("insert into PACIENTES (FECHA_ALTA,EMPRESA_ID,PUESTO_TRABAJO_ID," +
                    "NUMERO_LEGAJO,APELLIDO,NOMBRE,TIPO_DOC,NUMERO_DOC,CARGA_FAMILIAR,TELEFONO,CELULAR,EMAIL,FECHA_NACIMIENTO," +
                    "SEXO,ESTADO_CIVIL,OBRA_SOCIAL_ID,MEDICO_ID,FECHA_BAJA) values " +
                    "(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
            st.setDate(1,p.getFechaAlta());
            st.setInt(2, p.getEmpresa().getIdEmpresa());
            st.setInt(3, p.getPuestoTrabajo().getIdPuestoTrabajo());
            st.setString(4, p.getNumeroLegajo());
            st.setString(5, p.getApellido());
            st.setString(6, p.getNombre());
            st.setString(7, p.getTipoDoc());
            st.setInt(8, p.getNumeroDoc());
            st.setString(9, p.getCargaFamiliar());
            st.setInt(10, p.getTelefono());
            st.setLong(11, p.getCelular());
            st.setString(12, p.getEmail());
            st.setDate(13, p.getFechaNacimiento());
            st.setString(14, p.getSexo());
            st.setString(15, p.getEstadoCivil());
            st.setInt(16, p.getObraSocial().getIdObraSocial());
            st.setInt(17, p.getMedico().getIdMedico());
            st.setDate(18, null);
            st.execute();
            res = true;

        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return res;
    }

    @Override
    public boolean delete(Paciente medi) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public boolean update(Paciente medi) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public Paciente find(Paciente medi) {
        Connection con = OracleDAOFactory.createConnection();
        Paciente med = null;
//
//        try {//
//            ResultSet rs = con.createStatement().executeQuery("select * from medicos where usuario='"+medi.getUsuario()+"'" );
//            if (rs.next()) {//ID_MEDICO APELLIDO NOMBRE DOMICILIO_ID TELEFONO EMAIL NUMERO_MATRICULA USUARIO CONTRASENA

//                med = new Paciente();
//                med.setIdPaciente(rs.getInt(1));
//                med.setApellido(rs.getString(2));
//                med.setNombre(rs.getString(3));
//                med.setDomicilio(new Domicilio (rs.getInt(4)));
//                med.setTelefono(rs.getInt(5));
//                med.setEmail(rs.getString(6));
//                med.setNumeroMatricula(rs.getString(7));
//                med.setUsuario(rs.getString(8));
//                med.setContrasena(rs.getString(9));
//
//            }
//            con.close();
//        } catch (SQLException ex) {
//            System.out.println(ex.getMessage());
//        }
        return med;
    }

    @Override
    public Collection<Paciente> list() {
        Connection con = OracleDAOFactory.createConnection();
        LinkedList<Paciente> res = new LinkedList();
//
//        try {//
//            ResultSet rs = con.createStatement().executeQuery("select * from medicos order by APELLIDO, NOMBRE");
//            while (rs.next()) {//ID_MEDICO APELLIDO NOMBRE DOMICILIO_ID TELEFONO EMAIL NUMERO_MATRICULA USUARIO CONTRASENA
//                Paciente med = new Paciente();
//                med.setIdPaciente(rs.getInt(1));
//                med.setApellido(rs.getString(2));
//                med.setNombre(rs.getString(3));
//                med.setDomicilio(new Domicilio (rs.getInt(4)));
//                med.setTelefono(rs.getInt(5));
//                med.setEmail(rs.getString(6));
//                med.setNumeroMatricula(rs.getString(7));
//                med.setUsuario(rs.getString(8));
//                med.setContrasena(rs.getString(9));
//                res.add(med);
//            }
//            con.close();
//        } catch (SQLException ex) {
//            System.out.println(ex.getMessage());
//        }
        return res;
    }

    public int ultimoReg (){
        Connection con = OracleDAOFactory.createConnection();
        int dir = 0;
        try {
            ResultSet rs = con.createStatement().executeQuery("SELECT MAX(id_paciente) FROM pacientes");
            if (rs.next()) {
                dir= rs.getInt(1);
            }
            con.close();
        } catch (SQLException ex) {
        }
        return dir;
    }

    public Collection<Paciente> buscarPorEmpresa(Empresa emp) {
        Connection con = OracleDAOFactory.createConnection();
        LinkedList<Paciente> res = new LinkedList();
        try {
            ResultSet rs = con.createStatement().executeQuery("select " +
                    "P.ID_PACIENTE, P.NUMERO_LEGAJO, P.APELLIDO, P.NOMBRE, P.NUMERO_DOC, P.FECHA_NACIMIENTO, " +
                    "E.RAZON_SOCIAL " +
                    "from PACIENTES P, EMPRESAS E " +
                    "where P.EMPRESA_ID = E.ID_EMPRESA and " +
                    "E.ID_EMPRESA = " + emp.getIdEmpresa());
            while (rs.next()) {
                Paciente p = new Paciente();
                p.setIdPaciente(rs.getInt(1));
                p.setNumeroLegajo(rs.getString(2));
                p.setApellido(rs.getString(3));
                p.setNombre(rs.getString(4));
                p.setNumeroDoc(rs.getInt(5));
                p.setFechaNacimiento(rs.getDate(6));
                emp.setRazonSocial(rs.getString(7));
                p.setEmpresa(emp);
                res.add(p);
            }
            con.close();
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return res;
    }

    public Collection<Paciente> buscarPorApellido(String ape) {
        Connection con = OracleDAOFactory.createConnection();
        LinkedList<Paciente> res = new LinkedList();
        try {
            ResultSet rs = con.createStatement().executeQuery("select " +
                    "P.ID_PACIENTE, P.NUMERO_LEGAJO, P.APELLIDO, P.NOMBRE, P.NUMERO_DOC, P.FECHA_NACIMIENTO, " +
                    "E.RAZON_SOCIAL " +
                    "from PACIENTES P, EMPRESAS E " +
                    "where P.EMPRESA_ID = E.ID_EMPRESA and " +
                    "UPPER(P.APELLIDO) LIKE UPPER('" + ape + "%')");
            while (rs.next()) {
                Paciente p = new Paciente();
                p.setIdPaciente(rs.getInt(1));
                p.setNumeroLegajo(rs.getString(2));
                p.setApellido(rs.getString(3));
                p.setNombre(rs.getString(4));
                p.setNumeroDoc(rs.getInt(5));
                p.setFechaNacimiento(rs.getDate(6));
                Empresa emp = new Empresa();
                emp.setRazonSocial(rs.getString(7));
                p.setEmpresa(emp);
                res.add(p);
            }
            con.close();
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return res;
    }

    public Collection<Paciente> buscarPorDocumento(int doc) {
        Connection con = OracleDAOFactory.createConnection();
        LinkedList<Paciente> res = new LinkedList();
        try {
            ResultSet rs = con.createStatement().executeQuery("select " +
                    "P.ID_PACIENTE, P.NUMERO_LEGAJO, P.APELLIDO, P.NOMBRE, P.NUMERO_DOC, P.FECHA_NACIMIENTO, " +
                    "E.RAZON_SOCIAL " +
                    "from PACIENTES P, EMPRESAS E " +
                    "where P.EMPRESA_ID = E.ID_EMPRESA and " +
                    "P.numero_doc like '" + doc + "%'");
            while (rs.next()) {
                Paciente p = new Paciente();
                p.setIdPaciente(rs.getInt(1));
                p.setNumeroLegajo(rs.getString(2));
                p.setApellido(rs.getString(3));
                p.setNombre(rs.getString(4));
                p.setNumeroDoc(rs.getInt(5));
                p.setFechaNacimiento(rs.getDate(6));
                Empresa emp = new Empresa();
                emp.setRazonSocial(rs.getString(7));
                p.setEmpresa(emp);
                res.add(p);
            }
            con.close();
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        }
        return res;
    }
    
}
